# Configuration options for Uncrustify specifying the Mbed TLS code style.
#
# Note: The code style represented by this file has not yet been introduced
# to Mbed TLS.
#
# Copyright The Mbed TLS Contributors
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


# Wrap lines at 100 characters
code_width = 100

# Allow splitting long for statements between the condition statements
ls_for_split_full = true

# Allow splitting function calls between arguments
ls_func_split_full = true

input_tab_size = 4

# Spaces-only indentation
indent_with_tabs = 0

indent_columns = 4

# Indent 'case' 1 level from 'switch'
indent_switch_case = indent_columns

# Line-up strings broken by '\'
indent_align_string = true

# Braces on the same line (Egyptian-style braces)
nl_enum_brace = remove
nl_union_brace = remove
nl_struct_brace = remove
nl_do_brace = remove
nl_if_brace = remove
nl_for_brace = remove
nl_else_brace = remove
nl_while_brace = remove
nl_switch_brace = remove

# Braces on same line as keywords that follow them - 'else' and the 'while' in 'do {} while ()';
nl_brace_else = remove
nl_brace_while = remove
# Space before else on the same line
sp_brace_else = add
# If else is on the same line as '{', force exactly 1 space between them
sp_else_brace = force

# Functions are the exception and have braces on the next line
nl_fcall_brace = add
nl_fdef_brace = add

# Force exactly one space between ')' and '{' in statements
sp_sparen_brace = force

# At least 1 space around assignment
sp_assign = add

# Remove spaces around the preprocessor '##' token-concatenate
sp_pp_concat = ignore

# At least 1 space around '||' and '&&'
sp_bool = add

# But no space after the '!' operator
sp_not = remove

# No space after the bitwise-not '~' operator
sp_inv = remove

# No space after the addressof '&' operator
sp_addr = remove

# No space around the member '.' and '->' operators
sp_member = remove

# No space after the dereference '*' operator
sp_deref = remove

# No space after a unary negation '-'
sp_sign = remove

# No space between the '++'/'--' operator and its operand
sp_incdec = remove

# At least 1 space around comparison operators
sp_compare = add

# Remove spaces inside all kinds of parentheses:

# Remove spaces inside parentheses
sp_inside_paren = remove

# No spaces inside statement parentheses
sp_inside_sparen = remove

# No spaces inside cast parentheses '( char )x' -> '(char)x'
sp_inside_paren_cast = remove

# No spaces inside function parentheses
sp_inside_fparen = remove
# (The case where the function has no parameters/arguments)
sp_inside_fparens = remove

# No spaces inside the first parentheses in a function type
sp_inside_tparen = remove

# (Uncrustify >= 0.74.0) No spaces inside parens in for statements
sp_inside_for = remove

# Remove spaces between nested parentheses '( (' -> '(('
sp_paren_paren = remove
# (Uncrustify >= 0.74.0)
sp_sparen_paren = remove

# Remove spaces between ')' and adjacent '('
sp_cparen_oparen = remove

# (Uncrustify >= 0.73.0) space between 'do' and '{'
sp_do_brace_open = force

# (Uncrustify >= 0.73.0) space between '}' and 'while'
sp_brace_close_while = force

# At least 1 space before a '*' pointer star
sp_before_ptr_star = add

# Remove spaces between pointer stars
sp_between_ptr_star = remove

# No space after a pointer star
sp_after_ptr_star = remove

# But allow a space in the case of e.g. char * const x;
sp_after_ptr_star_qualifier = ignore

# Remove space after star in a function return type
sp_after_ptr_star_func = remove

# At least 1 space after a type in variable definition etc
sp_after_type = add

# Force exactly 1 space between a statement keyword (e.g. 'if') and an opening parenthesis
sp_before_sparen = force

# Remove a space before a ';'
sp_before_semi = remove
# (Uncrustify >= 0.73.0) Remove space before a semi in a non-empty for
sp_before_semi_for = remove
# (Uncrustify >= 0.73.0) Remove space in empty first statement of a for
sp_before_semi_for_empty = remove
# (Uncrustify >= 0.74.0) Remove space in empty middle statement of a for
sp_between_semi_for_empty = remove

# Add a space after a ';' (unless a comment follows)
sp_after_semi = add
# (Uncrustify >= 0.73.0) Add a space after a semi in non-empty for statements
sp_after_semi_for = add
# (Uncrustify >= 0.73.0) No space after final semi in empty for statements
sp_after_semi_for_empty = remove

# Remove spaces on the inside of square brackets '[]'
sp_inside_square = remove

# Must have at least 1 space after a comma
sp_after_comma = add

# Must not have a space before a comma
sp_before_comma = remove

# No space before the ':' in a case statement
sp_before_case_colon = remove

# Must have space after a cast - '(char)x' -> '(char) x'
sp_after_cast = add

# No space between 'sizeof' and '('
sp_sizeof_paren = remove

# At least 1 space inside '{ }'
sp_inside_braces = add

# At least 1 space inside '{ }' in an enum
sp_inside_braces_enum = add

# At least 1 space inside '{ }' in a struct
sp_inside_braces_struct = add

# At least 1 space between a function return type and the function name
sp_type_func = add

# No space between a function name and its arguments/parameters
sp_func_proto_paren = remove
sp_func_def_paren = remove
sp_func_call_paren = remove

# No space between '__attribute__' and '('
sp_attribute_paren = remove

# No space between 'defined' and '(' in preprocessor conditions
sp_defined_paren = remove

# At least 1 space between a macro's name and its definition
sp_macro = add
sp_macro_func = add

# Force exactly 1 space between a '}' and the name of a typedef if on the same line
sp_brace_typedef = force

# At least 1 space before a '\' line continuation
sp_before_nl_cont = add

# At least 1 space around '?' and ':' in ternary statements
sp_cond_colon = add
sp_cond_question = add

# Space between #else/#endif and comment afterwards
sp_endif_cmt = add

# Remove newlines at the start of a file
nl_start_of_file = remove

# At least 1 newline at the end of a file
nl_end_of_file = add
nl_end_of_file_min = 1

# Add braces in single-line statements
mod_full_brace_do = add
mod_full_brace_for = add
mod_full_brace_if = add
mod_full_brace_while = add

# Remove parentheses from return statements
mod_paren_on_return = remove

# Disable removal of leading spaces in a multi-line comment if the first and
# last lines are the same length
cmt_multi_check_last = false
